import axios from 'axios'
// @ == src
import baseUrl from './config'
// import qs from 'qs'

//axios.defaults.withCredentials = false;
axios.defaults.timeout = 50000;
axios.defaults.withCredentials = true;
axios.defaults.headers['Content-Type'] = 'application/json';
// axios.defaults.transformRequest = [function(data) {
//   if(data instanceof FormData){
//     return data
//   } else {
//     return qs.stringify(data);
//   }
// }];

/*
 * 增加请求拦截器
 */
axios.interceptors.request.use((config) => {
  // 预处理请求的信息
  return config
}, (error) => {
  // 预处理请求有异常error时抛出错误
  return Promise.reject(error)
})

/*
 * 增加相应拦截器
 */
axios.interceptors.response.use((response) => {
  // 预处理相应的数据
  return response
}, (error) => {
  // 错误返回 状态码验证
  if (error.response) {
    switch (error.response.status) {
      case 401:
        // 返回 401 清除token信息并跳转到登录页面
        // store.dispatch('logout');
        // router.replace({
        //   path: 'login',
        //   query: {redirect: router.currentRoute.fullPath}
        // })
    }
  }
  return Promise.reject(error)
})

/**
 * 返回axios方法
 * @param url（如果传绝对地址则baseURL不会追加到url之前）
 * @param method
 * @param timeout
 * @param data
 * @param headers
 * @param dataType
 * @returns {AxiosPromise}
 */

export default function (url, {
  // 默认求情方式post
  method = 'post',
  // 超时
  // timeout = 50000,
  // 请求主题
  data = {},
  // 请求头
  headers = {
    // 'Access-Token': localStorage.getItem('token')
  },
  // 文件类型
  dataType = 'json'
}) {
  // 可根据不同method动态配置headers
  if (method === 'get') {
    headers = Object.assign({}, headers)
  } else {
    headers = Object.assign({}, headers)
  }
  const config = {
    method: method,
    // timeout: timeout,
    url: url,
    // 在外部文件配置axios的基础路径 ip地址
    baseURL: baseUrl.URL_EASYMOCK,
    data: data,
    headers: headers,
    dataType: dataType
  }
  return axios(config)
}
